//
// Created by pengtg on 2020/2/22.
//

#ifndef ANDROIDVIDEOPLAYER_IDEMUX_H
#define ANDROIDVIDEOPLAYER_IDEMUX_H

#include "XData.h"
#include "XThread.h"
#include "IObserver.h"
#include "XParameter.h"

//解封装接口
class IDemux:public IObserver{
public:
    //打开文件，或者流媒体 rtmp http rtsp
    virtual bool Open(const char *url) = 0;  //纯虚函数 定义的就是接口
    //Seek位置 pos 0.0-1.0
    virtual bool Seek(double pos) = 0;
    virtual void Close() = 0;
    //获取视频参数
    virtual XParameter GetVPara() = 0; //定义成纯虚函数

    //获取音频参数
    virtual XParameter GetAPara() = 0;

    //读取一帧数据，数据由调用者清理 涉及到空间调用时一定要做好注释
    virtual XData Read() = 0;

    //总时长（毫秒）
    int totalMs = 0;

protected:
    //定义成protected 不要让用户去访问
    //定义在IDemux接口类当中，而不是具体的FFDemux中，线程的处理，就已经跟我们具体的FFmpeg无关了
    virtual void Main();
};


#endif //ANDROIDVIDEOPLAYER_IDEMUX_H
